#!/bin/bash

# Prometheus 监控告警系统 - Serverless Kubernetes 部署脚本
# 适用于无节点环境（EKS Fargate、GKE Autopilot等）

set -e

echo "========================================="
echo "Prometheus 监控告警系统 - Serverless 部署"
echo "========================================="
echo

# 颜色定义
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color

# 检查 kubectl
if ! command -v kubectl &> /dev/null; then
    echo -e "${RED}❌ 错误: 未找到 kubectl 命令${NC}"
    exit 1
fi

echo -e "${GREEN}✅ kubectl 已安装${NC}"
echo

# 1. 创建命名空间
echo "=== 1. 创建命名空间 ==="
kubectl apply -f 00-namespace.yaml
echo

# 2. 部署 Consul（可选，默认禁用）
echo "=== 2. 部署 Consul（可选） ==="
kubectl apply -f 01-consul.yaml
echo -e "${YELLOW}⚠️  Consul 默认禁用（replicas=0），如需启用：${NC}"
echo "   kubectl scale deployment/consul --replicas=1 -n monitoring"
echo

# 3. 部署 Prometheus
echo "=== 3. 部署 Prometheus ==="
kubectl apply -f 02-prometheus-config.yaml
kubectl apply -f 02-prometheus-rules.yaml
kubectl apply -f 02-prometheus-rbac.yaml
kubectl apply -f 02-prometheus-deployment.yaml
echo -e "${GREEN}✅ Prometheus 配置已应用 ${NC}"
echo

# 4. 部署容器资源告警规则
echo "=== 4. 部署容器资源告警规则 ==="
kubectl apply -f 03-container-resource-alerts.yaml
echo

# 5. 部署 Alertmanager
echo "=== 5. 部署 Alertmanager ==="
kubectl apply -f 04-alertmanager.yaml
echo

# 6. 部署 Grafana
echo "=== 6. 部署 Grafana ==="
kubectl apply -f 08-grafana.yaml
echo

# 7. 部署 Grafana 仪表板
echo "=== 7. 部署 Grafana 仪表板 ==="
kubectl apply -f 09-grafana-dashboards.yaml
echo

# 8. 部署 kube-state-metrics
echo "=== 8. 部署 kube-state-metrics ==="
kubectl apply -f 06-kube-state-metrics.yaml
echo

# 9. 部署 Webhook 适配器
echo "=== 9. 部署告警 Webhook 适配器 ==="
kubectl apply -f 08-webhook-dingtalk.yaml
kubectl apply -f 09-webhook-telegram.yaml
kubectl apply -f 10-webhook-feishu.yaml
echo -e "${YELLOW}⚠️  Telegram 和飞书适配器默认禁用（replicas=0）${NC}"
echo

# 10. 等待 Pod 就绪
echo "=== 10. 等待 Pod 就绪 ==="
echo "等待 Prometheus..."
kubectl wait --for=condition=ready pod -l app=prometheus -n monitoring --timeout=120s || true
echo "等待 Alertmanager..."
kubectl wait --for=condition=ready pod -l app=alertmanager -n monitoring --timeout=60s || true
echo "等待 Grafana..."
kubectl wait --for=condition=ready pod -l app=grafana -n monitoring --timeout=60s || true
echo "等待 kube-state-metrics..."
kubectl wait --for=condition=ready pod -l app.kubernetes.io/name=kube-state-metrics -n monitoring --timeout=60s || true
echo

# 11. 显示部署状态
echo "=== 11. 部署状态 ==="
kubectl get pods -n monitoring
echo

# 12. 显示服务信息
echo "=== 12. 服务信息 ==="
kubectl get svc -n monitoring
echo

# 13. 显示访问方式
echo "========================================="
echo "部署完成！访问方式："
echo "========================================="
echo

echo -e "${YELLOW}访问方式 1：LoadBalancer（已配置，跨云通用）${NC}"
echo
PROM_IP=$(kubectl get svc prometheus -n monitoring -o jsonpath='{.status.loadBalancer.ingress[0].ip}' 2>/dev/null || echo "<待分配>")
GRAFANA_IP=$(kubectl get svc grafana -n monitoring -o jsonpath='{.status.loadBalancer.ingress[0].ip}' 2>/dev/null || echo "<待分配>")
ALERT_IP=$(kubectl get svc alertmanager -n monitoring -o jsonpath='{.status.loadBalancer.ingress[0].ip}' 2>/dev/null || echo "<待分配>")

echo -e "${GREEN}Prometheus:${NC}"
if [ "$PROM_IP" = "<待分配>" ]; then
    echo "  ⏳ 公网 IP 分配中... (1-3分钟)"
    echo "  检查命令: kubectl get svc prometheus -n monitoring"
else
    echo "  ✅ http://$PROM_IP:9090"
fi
echo

echo -e "${GREEN}Grafana:${NC}"
if [ "$GRAFANA_IP" = "<待分配>" ]; then
    echo "  ⏳ 公网 IP 分配中... (1-3分钟)"
    echo "  检查命令: kubectl get svc grafana -n monitoring"
else
    echo "  ✅ http://$GRAFANA_IP:3000"
    echo "  默认账号: admin / admin"
fi
echo

echo -e "${GREEN}Alertmanager:${NC}"
if [ "$ALERT_IP" = "<待分配>" ]; then
    echo "  ⏳ 公网 IP 分配中... (1-3分钟)"
    echo "  检查命令: kubectl get svc alertmanager -n monitoring"
else
    echo "  ✅ http://$ALERT_IP:9093"
fi
echo

echo -e "${YELLOW}访问方式 2：Port Forward（本地开发）${NC}"
echo
echo "  kubectl port-forward -n monitoring svc/prometheus 9090:9090 &"
echo "  kubectl port-forward -n monitoring svc/grafana 3000:3000 &"
echo "  kubectl port-forward -n monitoring svc/alertmanager 9093:9093 &"
echo "  访问: http://localhost:9090 | http://localhost:3000 | http://localhost:9093"
echo

echo "========================================="
echo -e "${GREEN}Serverless 环境监控能力${NC}"
echo "========================================="
echo "✅ 容器资源监控（CPU/内存/网络/磁盘）"
echo "✅ Pod 状态监控（重启/异常/OOM）"
echo "✅ K8s 对象监控（Deployment/StatefulSet/Job/PVC/HPA）"
echo "✅ 应用监控（业务指标/JVM/接口性能）"
echo "✅ 告警规则：~39条（容器8+K8s27+系统4）"
echo "✅ Grafana 仪表板：3个（业务/K8s/Pod）"
echo
echo -e "${YELLOW}⚠️  安全建议${NC}"
echo "- 配置安全组白名单，仅允许办公网 IP 访问"
echo "- 登录 Grafana 后立即修改默认密码"
echo "- 生产环境建议配置 Ingress + TLS"
echo
echo -e "${YELLOW}⚠️  Serverless 限制${NC}"
echo "- ❌ 无节点级别监控（物理机 CPU/内存/磁盘）"
echo "- ✅ 替代方案：使用云厂商节点监控服务"
echo
echo "========================================="
echo -e "${GREEN}🎉 部署完成！监控系统已就绪${NC}"
echo "========================================="
echo
echo "下一步："
echo "1. 等待 LoadBalancer 分配公网 IP（1-3分钟）"
echo "2. 配置安全组白名单限制访问"
echo "3. 登录 Grafana 修改默认密码"
echo "4. 检查 Prometheus Targets：http://<PROMETHEUS-IP>:9090/targets"
echo "5. 查看 Grafana 仪表板：http://<GRAFANA-IP>:3000"
echo
